using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using System.Text;
using System.Linq;
using WLYT.Domain.Model;
using WLYT.Domain.ApiModel;

namespace WLYT.Application.Interfaces
{
    public interface IOrderService : IBaseService<Order>
    {
        Task<Tuple<IList<Order>, int>> GetModelsByPageAsync(int type, string docType, int? status, string docNum, string supplierCode, int pageSize, int pageIndex);
        Task<Tuple<IList<object>, int>> GetItemsByPageAsync(int type, string docNum, string supplierCode, int pageSize, int pageIndex);
        Task<Tuple<IList<object>, int>> GetReturnItemsByPageAsync(string docNum, string labelId, int pageSize, int pageIndex);
        Task<Tuple<IList<object>, int>> GetDetailItemsByPageAsync(int type, string docNum, int pageSize, int pageIndex);
        Task<IList<OrderItem>> GetOrderItemsAsync(string docNum);
        Task<IList<object>> GetItemList(int type, string docType, int? status, string docNum, string supplierCode);
        Task<List<string>> GetTLOrderNum();
        Task<ApiResult> SyncOrder(OrderModel model);
        Task<ApiResult> GetOrder(string docNum);
        Task<ApiResult> SyncLabel(ApiLabelModel labelModel);
        Task<OrderItemDetail> GetOrderItemDetail(string labelId);
        Task<ApiResult> SyncInOrder(ApiOrderItemModel model);
        Task<bool> CreatePickData(string docNum);
        Task<List<OrderItemDetail>> GetOutTask(string wareCode, string docNum = "");
        Task<List<string>> GetOutList(string wareCode);
        Task<bool> WarehousOut_NG(string labelId);
        Task<ApiResult> SyncOutOrder(ApiOrderItemModel model);
        Task<List<OrderItemDetailTemp>> GetDLJOrder();
        Task<bool> PickReturnOrder(string docNum, string labelId, bool isSevenInch, bool isRemove);
        Task<List<OrderItemDetailTemp>> GetOrderItemDetailTemp(string docNum);
        Task<bool> UpdateAgvStatus(bool isSevenInch);
        Task<bool> SyncInOrder_Err();
        Task<ApiResult> OrderManualComplete(string ids);
        Task<object> GetLabel_CB(string labelId);
        Task<ApiResult> Unpack_TBJ(UnpackModel model);
        Task<Inventory> GetInventory(string labelId);
        Task<ApiResult> PickSplit(string labelId);
        Task<bool> DeleteOrder(string docNum);
    }
}